package jobs;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import models.EtatStage;
import models.Stage;
import play.Logger;
import play.jobs.*;
 
@On("0 0 0 * * ?")
public class Bootstrap extends Job {
    
	/**
	 * Change les états des stages en fonction de la date du jour et des dates enregistrées
	 */
    public void doJob() {
        List<Stage> stages=Stage.find("etat.id_etatstage not like ? or etat.id_etatstage not like ? or etat.id_etatstage not like ? or etat.id_etatstage not like ? ", "TER", "REA", "REAI", "REACE").fetch();
        Iterator<Stage> it=stages.iterator();
        Calendar today=Calendar.getInstance();
        EtatStage enCours=EtatStage.find("id_etatstage like ?", "COUR").first();
        EtatStage realise=EtatStage.find("id_etatstage like ?", "REA").first();
        EtatStage realiseIndemn=EtatStage.find("id_etatstage like ?", "REAI").first();
        EtatStage realiseCompet=EtatStage.find("id_etatstage like ?", "REACE").first();
        EtatStage termine=EtatStage.find("id_etatstage like ?", "TER").first();
        while(it.hasNext()){
        	Stage stage=it.next();
        	//Stage en cours si la date de début est inférieure ou égale à la date du jour
        	if(stage.dateDeb!=null && (stage.dateDeb.equals(today.getTime())||(today.getTime().after(stage.dateDeb) && today.getTime().before(stage.dateExam)))){
        		stage.etat=enCours;
        		stage.save();
        	}
        	//stage réalisé si la date d'examen est inférieure ou égale à la date du jour
        	else if(stage.dateExam!=null && (stage.dateExam.equals(today.getTime())||stage.dateExam.before(today.getTime()))){
        		stage.etat=realise;
        		stage.save();
        	}
        	//stage terminé si les dates financière et pédagogique ont été entrées 
        	if(stage.dateFinancier!=null && stage.datePedagogique!=null){
        		stage.etat=termine;
        		stage.save();
        	}
        	//stage réalisé et indémnisé si la date financière a été indiquée
        	else if(stage.dateFinancier!=null){
        		stage.etat=realiseIndemn;
        		stage.save();
        	}
        	//stage réalisé et compétences enregistré
        	else if(stage.datePedagogique!=null){
        		stage.etat=realiseCompet;
        		stage.save();
        	}
        }
    }
    
}